package design.patterns.observer.advanceobserver;

import design.patterns.observer.simpleobserver.Observer;

import java.util.ArrayList;
import java.util.List;

/**
 * @Desc:   抽象主题角色
 * @author: cww
 * @DateTime: 2020/6/12 9:08
 */

abstract public class Subject {
    /**
     * 集合保存了所有对观察者对象的引用
     */
    private List<Observer> observerList = new ArrayList<>();

    /**
     * 调用这个方法登记一个新的观察者对象
     * @param observer
     */
    public void  attatch(Observer observer){
        observerList.add(observer);
        System.out.println("Attached an observer");
    }

    /**
     * 移除
     * @param observer
     */
    public void detatch(Observer observer){
        observerList.remove(observer);
    }

    /**
     * 给出所有观察者聚集的 Enumeration
     * @return
     */
    public List<Observer> observers(){
        return observerList;
    }

    /**
     * 调用该方法通知所有登记过的观察者
     */
    public void notifyObservers(){
        for (Observer observer : observerList) {
            observer.update();
        }
    }
}
